package cn.openea.perpartner.evaluation.web.service;

import cn.openea.perpartner.common.core.web.domain.AjaxResult;
import cn.openea.perpartner.evaluation.web.entity.EvaluationSignup;
import cn.openea.perpartner.evaluation.web.entity.vo.SignupDataVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * @author rains
 * @since 2023-07-06 15:03
 */
public interface IEvaluationSignupService extends IService<EvaluationSignup> {

    /**
     * 校验是否可以报名
     * @param evaluationSignup
     */
    JSONObject verifyRegistration(EvaluationSignup evaluationSignup);

    /**
     * 报名参与
     * @param evaluationSignup
     */
    EvaluationSignup join(EvaluationSignup evaluationSignup);

    /**
     * 提交成果
     * @param evaluationSignup
     * @return
     */
    boolean submitResult(EvaluationSignup evaluationSignup);

    /**
     * 验收通过
     * @param evaluationSignup
     * @return
     */
    boolean pass(EvaluationSignup evaluationSignup);

    /**
     * 验收不通过(退回/回收)
     * 第1/2次验收不通过，退回给参与者重新提交成果
     * 第3次验收不通过，则直接回收任务，释放名额
     * @param evaluationSignup
     * @return
     */
    boolean disagree(EvaluationSignup evaluationSignup);

    /**
     * 评级
     * @param vo
     * @return
     */
    boolean rating(SignupDataVo vo);

    /**
     * 回收名额
     * @param vo
     * @return
     */
    AjaxResult recyclingQuota(SignupDataVo vo);

    /**
     * 获取未提交成果的报名记录
     * @param partnerId
     * @return
     */
    List<EvaluationSignup> getNotSubmit(String partnerId);

    /**
     * 获取排行榜记录
     * @param vo
     * @return
     */
    List<EvaluationSignup> getRankingList(SignupDataVo vo);

    /**
     * 获取已通过验收的报名记录---不分页
     * @param vo
     * @return
     */
    List<EvaluationSignup> getPassList(SignupDataVo vo);

    /**
     * 获取报名记录
     * @param vo
     * @return
     */
    List<EvaluationSignup> selectList(SignupDataVo vo);

    /**
     * 统计名额
     * 参与名额。剩余名额等
     * @param wrapper
     * @return
     */
    Long countQuota(LambdaQueryWrapper wrapper);

    /**
     * 获取排行榜标题
     * @param id
     * @return
     */
    String getRatingListTitle(String id);

    /**
     * 获取当前节点名称
     * @param signupInfo
     * @param tag
     * @return
     */
    String getCurrentNodeName(EvaluationSignup signupInfo, String tag);

    /**
     * 获取当前的【已办】节点名称
     * （1）用户报名后，待办=提交成果；用户提交成果后，已办=已提交成果
     * （2）发起人收到用户成果，待办=验收成果；发起人通过验收，已办=已通过验收；发起人不通过验收，已办=第1次(2次)退回
     * （3）发起人第1次(2次)退回成果，用户待办=第1次(2次)修改；用户修改成果后，已办=已提交成果
     * @param signupInfo
     * @param tag
     * @return
     */
    String getDoneNodeName(EvaluationSignup signupInfo, String tag);

    /**
     * 结束待办
     * @param id
     * @param userId
     * @param nodeName
     * @param doneNodeName 已办的
     * @param status
     * @return
     */
    boolean endTodo(String id, String userId, String nodeName, String doneNodeName, String status);

    /**
     * 补全迁移的历史数据
     * @return
     */
    boolean dealHistoricalData();

}
